#pragma once

#define xhand_over(...)                                 \
the_t && hand_over(){                                   \
    return (the_t &&)xthe;                              \
}                                                       \
                                                        \
the_t & operator=(the_t && self){                       \
    if (this == & self){                                \
        return xthe;                                    \
    }                                                   \
                                                        \
    __VA_ARGS__;                                        \
    xnew(this) the_t((the_t &&)self);                   \
    return xthe;                                        \
}

#define xhand_over_with_close(...)      xhand_over(this->close(); ## __VA_ARGS__)
